# Python 条件控制示例

print("=" * 50)
print("Python 条件控制")
print("""
1. if 语句：基本的条件判断
2. if-else 语句：二选一的条件判断
3. if-elif-else 语句：多分支条件判断
4. 嵌套条件语句：条件语句内部再嵌套条件语句
5. 条件表达式（三元运算符）：简洁的条件赋值
6. 多条件判断：使用 and、or、not 进行复杂条件组合
7. 使用 in 进行成员检查：检查元素是否在容器中
8. 真值测试：了解Python中各种数据类型的真假值
9. 异常处理中的条件判断：结合异常处理的条件判断
10. 实用示例：用户登录验证的实际应用
11. match-case 语句：Python 3.10+ 的模式匹配语法
""")
print("=" * 50)

# 1. if 语句
print("\n1. if 语句")
print("-" * 30)

age = 20
if age >= 18:
    print(f"年龄: {age}岁，已成年")

temperature = 25
if temperature > 30:
    print("天气很热")
if temperature <= 30:
    print("天气不热")

# 2. if-else 语句
print("\n\n2. if-else 语句")
print("-" * 30)

score = 85
if score >= 60:
    print(f"分数: {score}，及格了")
else:
    print(f"分数: {score}，不及格")

is_raining = True
if is_raining:
    print("下雨了，带伞出门")
else:
    print("没下雨，可以不带伞")

# 3. if-elif-else 语句
print("\n\n3. if-elif-else 语句")
print("-" * 30)

grade = 85
if grade >= 90:
    print("等级: 优秀")
elif grade >= 80:
    print("等级: 良好")
elif grade >= 70:
    print("等级: 中等")
elif grade >= 60:
    print("等级: 及格")
else:
    print("等级: 不及格")

# 根据时间判断问候语
hour = 14
if 5 <= hour < 12:
    print("早上好!")
elif 12 <= hour < 18:
    print("下午好!")
elif 18 <= hour < 22:
    print("晚上好!")
else:
    print("夜深了!")

# 4. 嵌套条件语句
print("\n\n4. 嵌套条件语句")
print("-" * 30)

username = "admin"
password = "123456"

if username == "admin":
    if password == "123456":
        print("登录成功")
    else:
        print("密码错误")
else:
    print("用户名不存在")

# 复杂条件判断
num = 15
if num > 0:
    if num % 2 == 0:
        print(f"{num} 是正偶数")
    else:
        print(f"{num} 是正奇数")
elif num == 0:
    print("数字是零")
else:
    print(f"{num} 是负数")

# 5. 条件表达式（三元运算符）
print("\n\n5. 条件表达式（三元运算符）")
print("-" * 30)

a, b = 10, 20
max_value = a if a > b else b
print(f"a = {a}, b = {b}, 最大值 = {max_value}")

is_member = True
discount = 0.1 if is_member else 0
print(f"会员状态: {is_member}, 折扣: {discount}")

# 复杂条件表达式
points = 150
level = "黄金会员" if points >= 1000 else ("白银会员" if points >= 500 else "普通会员")
print(f"积分: {points}, 会员等级: {level}")

# 6. 多条件判断
print("\n\n6. 多条件判断")
print("-" * 30)

# 使用 and 连接多个条件
age = 25
has_license = True
if age >= 18 and has_license:
    print("可以开车")

# 使用 or 连接多个条件
is_weekend = True
is_holiday = False
if is_weekend or is_holiday:
    print("今天休息")

# 使用 not 取反
is_sunny = False
if not is_sunny:
    print("今天不是晴天")

# 复杂条件组合
score = 85
attendance = 90
if score >= 80 and attendance >= 85:
    if score >= 90:
        print("优秀学生")
    else:
        print("良好学生")
else:
    print("需要努力")

# 7. 使用 in 进行成员检查
print("\n\n7. 使用 in 进行成员检查")
print("-" * 30)

fruits = ["apple", "banana", "orange"]
fruit = "apple"
if fruit in fruits:
    print(f"{fruit} 在水果列表中")

# 检查字符是否在字符串中
text = "Hello, Python!"
if "Python" in text:
    print("找到了 'Python'")

# 检查数字是否在范围内
number = 5
if number in range(1, 11):
    print(f"{number} 在 1-10 范围内")

# 8. 真值测试
print("\n\n8. 真值测试")
print("-" * 30)

# 真值测试示例
values = [True, False, 1, 0, -1, "", "hello", [], [1, 2], {}, {"key": "value"}]

for value in values:
    if value:
        print(f"{str(value):<15} 被判断为 True")
    else:
        print(f"{str(value):<15} 被判断为 False")

# 使用真值测试简化代码
my_list = [1, 2, 3]
if my_list:  # 等价于 len(my_list) > 0
    print("列表不为空")
else:
    print("列表为空")

# 9. 异常处理中的条件判断
print("\n\n9. 异常处理中的条件判断")
print("-" * 30)

user_input = "abc"
try:
    number = int(user_input)
    if number > 0:
        print(f"输入的数字是正数: {number}")
    else:
        print(f"输入的数字不是正数: {number}")
except ValueError:
    print("输入的不是有效数字")

# 10. 实用示例：用户登录验证
print("\n\n10. 实用示例：用户登录验证")
print("-" * 30)

def login_check(username, password):
    valid_users = {
        "admin": "admin123",
        "user1": "pass456",
        "user2": "pass789"
    }

    if not username:
        return "用户名不能为空"
    elif not password:
        return "密码不能为空"
    elif username not in valid_users:
        return "用户名不存在"
    elif valid_users[username] != password:
        return "密码错误"
    else:
        return "登录成功"

# 测试登录函数
test_cases = [
    ("", "pass"),           # 用户名为空
    ("admin", ""),          # 密码为空
    ("unknown", "pass"),    # 用户名不存在
    ("admin", "wrongpass"), # 密码错误
    ("admin", "admin123")   # 登录成功
]

for username, password in test_cases:
    result = login_check(username, password)
    print(f"用户名: '{username}', 密码: '{password}' => {result}")

# 11. match-case 语句 (Python 3.10+)
print("\n\n11. match-case 语句")
print("-" * 30)

def handle_http_status(status):
    match status:
        case 200:
            return "请求成功"
        case 404:
            return "页面未找到"
        case 500:
            return "服务器内部错误"
        case _:
            return "其他状态码"

# 测试 match-case
status_codes = [200, 404, 500, 403, 301]
for code in status_codes:
    result = handle_http_status(code)
    print(f"状态码 {code}: {result}")

# 使用 match-case 处理不同类型的数据
def handle_data(data):
    match data:
        case int() if data > 0:
            return f"正整数: {data}"
        case int() if data < 0:
            return f"负整数: {data}"
        case int() if data == 0:
            return "零"
        case str() if len(data) > 10:
            return f"长字符串: {data[:10]}..."
        case str():
            return f"短字符串: {data}"
        case list() if len(data) == 0:
            return "空列表"
        case list():
            return f"列表，长度为 {len(data)}"
        case _:
            return f"其他类型: {type(data).__name__}"

# 测试数据处理
test_data = [42, -5, 0, "Hello World!", "Hi", [], [1, 2, 3], {"key": "value"}]
for data in test_data:
    result = handle_data(data)
    print(f"数据 {data} => {result}")

print("\n" + "=" * 50)
print("条件控制示例结束")
print("=" * 50)
